// Copyright (c) 2025, 大连理工大学 (Dalian University of Technology)
//
// Licensed under the Mulan PSL v2.
// You can use this file according to the terms and conditions of the Mulan PSL v2.
// You may obtain a copy of the License at
//
//     http://license.coscl.org.cn/MulanPSL2
//
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. SEE THE MULAN PSL v2
// FOR MORE DETAILS.

#include "DBManager/Repository/HDF5/Result/Summary/EIGENVALUERepository.h"

#include "DBManager/Repository/HDF5/Base/HDF5RepositoryMacro.h"

HDF5_REG_NO_SORT_REPOSITORY (EIGENVALUERepository)

using namespace SG::DBManager::HDF5;
using namespace SG::DataStructure;

EIGENVALUERepository::EIGENVALUERepository (HDF5Database& database)
    : SG::DBManager::HDF5::ResultRepositoryBase<Post::EIGENVALUEData> (database)
{}

void EIGENVALUERepository::InitialDatasetInfo ()
{
    // 注册主键表，用于存储 EIGENVALUEData
    RegisterTableInfo<Post::EIGENVALUEData> ("/SG/RESULT/SUMMARY/EIGENVALUE", MainDataset);

    // 注册索引表，用于存储 ID 索引
    RegisterTableInfo<Common::Id> ("/OWN/INDEX/RESULT/SUMMARY/EIGENVALUEKEY", IndexDataset);

    // 注册域表，用于存储域 ID 和域相关的数据
    RegisterTableInfo<ResultDomainIndex> ("/INDEX/SG/RESULT/SUMMARY/EIGENVALUE", DomainIndexDataset);
}

SG::DataStructure::Common::Status EIGENVALUERepository::Find (SG::DataStructure::Common::Id domainId,
                                                              SG::DataStructure::Common::Id entityId,
                                                              _OUT std::vector<Post::EIGENVALUEData>& entities)
{
    std::vector<Post::EIGENVALUEData> temp;
    GetDataset (MainDataset).read (temp);

    for (auto&& i : temp)
    {
        if (i.m_domainId == domainId && i.m_MODE == entityId)
            entities.push_back (i);
    }

    return SG::DataStructure::Common::Status::STATUS_Success;
}